// 导入必要的模块和插件
import { defineConfig, globalIgnores } from 'eslint/config' // ESLint配置工具函数
import globals from 'globals' // 全局变量定义
import js from '@eslint/js' // JavaScript推荐规则
import pluginVue from 'eslint-plugin-vue' // Vue.js ESLint插件
import skipFormatting from '@vue/eslint-config-prettier/skip-formatting' // 跳过Prettier格式化

// 导出ESLint配置对象
export default defineConfig([
  {
    // 定义需要检查的文件范围
    name: 'app/files-to-lint',
    files: ['**/*.{js,mjs,jsx,vue}'], // 匹配所有JS、JSX和Vue文件
  },

  // 定义需要忽略的目录
  globalIgnores(['**/dist/**', '**/dist-ssr/**', '**/coverage/**']),

  {
    // 配置全局变量环境
    languageOptions: {
      globals: {
        ...globals.browser, // 启用浏览器全局变量
      },
      // 添加JSX解析支持
      parserOptions: {
        ecmaFeatures: {
          jsx: true,
        },
      },
    },
  },

  // 应用JavaScript推荐规则
  js.configs.recommended,

  {
    rules: {
      // 常用代码质量规则
      // 'no-console': 'warn', // 控制台打印警告
      // 'no-debugger': 'warn', // debugger 语句警告
      'prefer-const': 'warn', // 优先使用 const
      'no-unused-vars': [
        'warn',
        {
          argsIgnorePattern: '^_', // 忽略以_开头的参数
          varsIgnorePattern: '^_', // 忽略以_开头的变量
        },
      ],
      'no-undef': 'error', // 未定义变量错误

      // Vue 相关规则
      'vue/no-unused-components': 'warn', // 未使用组件警告
      'vue/no-unused-vars': [
        'warn',
        {
          ignorePattern: '^_', // 忽略以_开头的变量
        },
      ],
      'vue/html-self-closing': 'warn', // HTML 自闭合标签警告
      'vue/require-default-prop': 'warn', // props 需要默认值
    },
  },

  // 应用Vue.js必需规则
  ...pluginVue.configs['flat/essential'],

  {
    files: ['**/*.{js,mjs,jsx,vue}'],
    rules: {
      'vue/multi-word-component-names': 'off', // 'vue/multi-word-component-names': 'off' - 关闭Vue组件名必须使用多个单词的规则
      'vue/no-reserved-component-names': 'off', // 关闭HTML保留标签名检查
    },
  },

  // 跳过格式化配置（通常由Prettier处理）
  skipFormatting,
])
